import {CHANGE_INPUT_VALUE,DELETE_TODO_ITEM,ADD_TODO_ITEM,INIT_LIST_ACTION} from './actionTypes'

const defaultState = {
    inputValue: '',
    list: []
}
// 这里默认数据内容为 defaultState
// reducer 可以接受state，但是绝不能修改state
export default (state = defaultState, action) => {
    if (action.type === CHANGE_INPUT_VALUE) {
        // 先将原来的内容进行深拷贝
        const newState = JSON.parse(JSON.stringify(state));
        // 然后更新数据
        newState.inputValue = action.value;
        // 最后返回新的数据
        return newState;
    }
    if (action.type === ADD_TODO_ITEM) {
        // 先将原来的内容进行深拷贝
        const newState = JSON.parse(JSON.stringify(state));
        // 使用 push 方法将input框中的数据（inputValue）加入到 list 中
        newState.list.push(newState.inputValue);
        // 加完之后将数据置为空
        newState.inputValue = '';
        // 最后返回新的数据
        return newState;
    }
    if (action.type === DELETE_TODO_ITEM) {
        const newState = JSON.parse(JSON.stringify(state));
        // 使用splice方法进行内容的删除
        // splice 非纯函数
        // const arr = [10, 20, 30, 40, 50];
        // const spliceRes = arr.splice(1, 2, 'a', 'b', 'c'); 
        // 对于splice方法，第一个参数表示开始截取的下标，第二个参数代表截取的长度，后续的参数代表嫁接进去的内容
        // console.log(spliceRes, arr); // [20,30] , [10,'a','b','c',40,50]
        // const spliceRes1 = arr.splice(1, 2); // 只想剪去不想加 返回[10,40,50]
        newState.list.splice(action.index,1);
        return newState;
    }
    if (action.type === INIT_LIST_ACTION) {
        const newState = JSON.parse(JSON.stringify(state));
        newState.list = action.data;
        return newState;
    }
    // 这里可以证明这里自动接收了数据
    // console.log(state, action); // reducer.js:7 {inputValue: "123", list: Array(2)} {type: "change_input_value", value: "123a"}

    // state可以理解为存储的数据
    return state;
}